iT邦幫忙

2025 iThome 鐵人賽

0

Binary Tree Right Side View

LC 199

  • 類別:BFS / Level Order Traversal
  • 給一棵二元樹,從右側看過去時,可以看到哪些節點?
  • 請回傳「從右邊看到的節點值」列表。
  • Ex.
Input: 
    1
   / \
  2   3
   \   \
    5   4
Output: [1,3,4]

thoughts

  • 使用 BFS 層序遍歷:
  • 每層只取「最後一個節點」即可(即該層最右邊)。
  • 時間:O(n)
  • 空間:O(n)

Kotlin

data class TreeNode(var `val`: Int, var left: TreeNode? = null, var right: TreeNode? = null)

fun rightSideView(root: TreeNode?): List<Int> {
    if (root == null) return emptyList()
    val queue: ArrayDeque<TreeNode> = ArrayDeque()
    val result = mutableListOf<Int>()
    queue.add(root)

    while (queue.isNotEmpty()) {
        val size = queue.size
        for (i in 0 until size) {
            val node = queue.removeFirst()
            if (i == size - 1) result.add(node.`val`) // 最右邊
            node.left?.let { queue.add(it) }
            node.right?.let { queue.add(it) }
        }
    }
    return result
}

Follow-up

  • 如何用 DFS(右優先遍歷)實作?
  • 如果要取得「左視圖 (Left Side View)」怎麼改?
  • 如果樹非常大(例如 100 萬節點),如何減少記憶體使用?

上一篇
#26
下一篇
#28
系列文
來都來了-涮就涮吧36
  1. 32
    #31
  2. 33
    #32
  3. 34
    #33
  4. 35
    #34
  5. 36
    #35
完整目錄
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言